5 Utilisation avancée > 5.2 La ligne de commande


5.2 La ligne de commande

Nous avons déjà vu, dans les chapitres précédents quelques unes des options de QEmu. En voici un parcours plus détaillé. Toutes les options ne sont pas présentées, nous nous limiterons aux plus utiles.

5.2.1 Support réseau

QEmu peut émuler une ou plusieurs cartes réseau. Les cartes émulées sont des modèles 10 Mbit/s, mais ceci est amplement suffisant pour un système virtuel. Ces interfaces permettent à QEmu de communiquer avec le monde extérieur, et en premier lieu avec le système hôte. La création d'un VLAN permet également de construire un réseau entre les machines virtuelles. Cette option pose toutefois encore quelques problèmes de fonctionnement sur un hôte Windows.

L'option complète permettant de créer une carte réseau est :

-net nic[,macaddr=xx:xx:xx:xx][,model=<type>]

Les options macaddr et type sont facultatives.

Les valeurs possibles pour <type> sont : ne2k_pci, ne2k_isa, rtl8139, smc91c111, lance. Si <type> n'est pas précisé, ne2k_pci est pris par défaut. Cette option peut être répétée autant de fois qu'il faut de cartes réseau dans le système cible, mais il faut prendre soin de donner une adresse MAC différente à chaque carte (option macaddr=xx:xx:xx:xx avec 52:54:00:12:34:56 comme valeur par défaut).

Lorsqu'aucune option réseau n'est fournie à QEmu, il crée par défaut une carte réseau PCI à base de circuit RTL8029 (ne2k_pci). L'option par défaut est en réalité : -net nic -net user.

Pour interdire la création de la carte réseau, il faut ajouter l'option -net none à la ligne de commande.

5.2.1.1 Architecture réseau de QEmu

L'émulation réseau de QEmu peut être implémentée de deux manières.

Le premier mode, le mode utilisateur (user mode) fonctionne correctement sur un hôte Windows, sans élément supplémentaire. Dans ce cas, QEmu se comporte comme n'importe quelle application faisant appel au réseau, utilisant le matériel et les composants réseau existants.

Le second mode, TUN/TAP, est plus spécifique au monde Linux, mais peut être implémenté sous Windows à condition d'installer le logiciel nécessaire. Dans ce mode QEmu crée une carte réseau virtuelle sur l'hôte, où elle peut être configurée comme n'importe quel autre périphérique. Ce mode nécessite les droits d'administration sur l'hôte, puisqu'un périphérique (virtuel) doit être créé.

5.2.1.1.1 Mode utilisateur

Dans ce mode, qui est d'ailleurs le mode par défaut, QEmu ne se contente pas d'émuler la carte réseau de l'ordinateur virtuel, mais il intègre également un pare-feu/passerelle, un serveur DHCP, un serveur DNS et un serveur SMB. Ces éléments ne sont toutefois pas paramétrables.




Illustration 4: Architecture réseau




Après l'installation du SE cible, vous pouvez vérifier le bon fonctionnement de la carte réseau virtuelle et de la couche TCP/IP en tapant :

ping 10.0.2.2

dans une invite de commande ou un terminal du SE cible. Vous devriez obtenir quelque chose ressemblant à ceci :

Envoi d'une requête 'ping' sur 10.0.2.2 avec 32 octets de données :

Réponse de 10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de 10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de 10.0.2.2 : octets=32 temps<1ms TTL=128
Réponse de 10.0.2.2 : octets=32 temps<1ms TTL=128

Statistiques Ping pour 10.0.2.2:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

Dans la plupart des cas, il suffit de configurer le protocole TCP/IP de la machine virtuelle pour utiliser DHCP, et tous les autres paramètres se mettent en place automatiquement. Par défaut, la machine virtuelle se verra attribuer l'adresse 10.0.2.15.

Voici, par exemple, la configuration réseau de Windows 2000 sous QEmu :

C:\>ipconfig/all

Configuration IP de Windows 2000

     Nom de l'hôte . . . . . . . . . . : QEMU-W2K
     Suffixe DNS principal . . . . . . :
     Type de noeud . . . . . . . . . . : Diffuser
     Routage IP activé . . . . . . . . : Oui
     Proxy WINS activé . . . . . . . . : Non

Ethernet carte Connexion au réseau local :

     Suffixe DNS spéc. à la connexion. :
     Description . . . . . . . . . . . : Carte Realtek PCI Ethernet à base RTL8029(AS)
     Adresse physique. . . . . . . . . : 52-54-00-12-34-56
     DHCP activé . . . . . . . . . . . : Oui
     Autoconfiguration activée . . . . : Oui
     Adresse IP. . . . . . . . . . . . : 10.0.2.15
     Masque de sous-réseau . . . . . . : 255.255.255.0
     Passerelle par défaut . . . . . . : 10.0.2.2
     Serveur DHCP. . . . . . . . . . . : 10.0.2.2
     Serveurs DNS. . . . . . . . . . . : 10.0.2.3
     Bail obtenu . . . . . . . . . . . : mardi 4 juillet 2006 08:16:27
     Bail expire . . . . . . . . . . . : mercredi 5 juillet 2006 08:16:27

5.2.1.1.2 Mode TUN/TAP

Dans le mode TUN/TAP, QEmu crée une carte réseau virtuelle directement sur le système hôte, par l'intermédiaire de laquelle il aura accès au réseau. Cette approche diffère du mode utilisateur, qui s'appuie simplement sur la configuration réseau existante de l'hôte, sans ajouter de matériel.

Ce mode est utilisable facilement sur les hôtes Linux, mais pour un hôte Windows, il est nécessaire d'installer un produit pouvant créer un adaptateur TAP. OpenVPN (http://openvpn.net), par exemple, peut être utilisé à cette fin. Une procédure de configuration, en anglais, existe ici : http://www.h7.dion.ne.jp/~qemu-win/TapWin32-en.html#vlan.



**** A compléter ****

5.2.1.2 VLAN

Le VLAN permet de connecter plusieurs machines virtuelles entre elles. QEmu permet de construire ce réseau de plusieurs manières différentes. Il peut être limité aux instances de QEmu, ou ouvert sur l'Internet, par l'intermédiaire du réseau user mode ou TUN/TAP.

Note : Cette option ne semble pas fonctionner correctement avec un hôte Windows pour le moment, l'option connect n'étant pas reconnue... Un patch est disponible ici : http://www.h7.dion.ne.jp/~qemu-win/, mais il n'est pas certain qu'il s'applique correctement sur les derniers sources CVS.

Quoi qu'il en soit, le schéma ci-dessous illustre les combinaisons possibles pour construire un VLAN avec QEmu. Il est bien sûr possible de n'en implémenter qu'une partie.


Illustration 5: VLAN - Toutes les combinaisons




Les options de ligne de commande qui permettent de configurer le VLAN sont les suivantes :

-net user[,vlan=n][,hostname=host]

-net tap[,vlan=n],ifname=name

-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]

-net socket[,vlan=n][,fd=h][,mcast=maddr:port]

En combinant ces options, il est possible de réaliser tout ou partie du VLAN décrit ci-dessus.

Les points à prendre en considération lorsqu'on construit un VLAN sont les suivants :

Cette option n'étant pas utilisable pour le moment sous Windows, nous nous bornerons à l'aborder sur le plan théorique. Voici, dans le principe, les lignes de commande à taper pour obtenir la configuration ci-dessus :



**** A compléter ****

5.2.1.3 Autres options réseau

Autres options réseau de QEmu.

-redir [tcp|udp]:host-port:[guest-host]:guest-port : permet de rediriger des ports TCP ou UDP de l'hôte vers la machine virtuelle. Nécessite l'emploi de -net user (option par défaut).

[tcp|udp], facultatif, indique si le port redirigé est un port TCP ou UDP

host-port : numéro du port du système hôte qui doit être redirigé.

[guest-host], facultatif, est l'adresse IP du système cible sur le VLAN QEmu (10.0.2.15 par défaut).

guest-port : port du système cible vers lequel le port hôte est redirigé.

Reportez vous au paragraphe 5.2.5, page 27 pour un exemple de redirection. Pour rediriger d'autres ports, ajoutez autant d'options -redir que nécessaire.

5.2.2 Partage de fichiers avec l'hôte

5.2.2.1 La disquette

C'est le moyen le plus simple pour échanger des fichiers entre l'hôte et la machine virtuelle. Il est reconnu par tous les SE. L'échange est possible en lecture et en écriture dans les deux sens (hôte <---> machine virtuelle).

Inconvénients : il n'est pas très rapide, et sa capacité est très limitée.

La commande change fda //./a: du moniteur permet d'insérer une disquette dans la machine virtuelle.

La commande eject fda retire la disquette du lecteur de la machine virtuelle.

5.2.2.2 Partage Microsoft

Sans doute le moyen le plus souple et le plus efficace lorsque l'hôte et la cible sont des SE Microsoft. Ce mode permet de partager des fichiers en lecture et en écriture dans les deux sens (hôte <---> machine virtuelle). Aucune option n'est nécessaire sur la ligne de commande de QEmu, sinon que le support réseau doit être activé.









Vous pouvez maintenant partager des fichiers.



Si le SE cible est Windows 9x, la procédure de connexion sous QEmu est légèrement différente (la création du partage sur l'hôte reste identique). Dans le SE cible :



Dans un SE cible d'origine non-Microsoft, il existe souvent une procédure similaire. smbclient doit être installé lorsque Linux est le SE cible pour reconnaître les partages Microsoft. D'autres SE peuvent avoir des modules équivalents.

Remarque : ce partage n'est possible que si le support réseau (user mode ou TUN/TAP) est configuré.

5.2.2.3 Partage de répertoire hôte

Cette option permet des transferts hôte ---> machine virtuelle. Le répertoire désigné sur la ligne de commande de QEmu apparaît au SE cible comme un nouveau lecteur de disques. Tout le contenu existant de ce répertoire est visible. Il est possible d'écrire sur ce disque, mais les modifications ne sont pas répercutées vers le dossier de l'hôte, et ne sont pas conservées. Après un redémarrage de QEmu, toutes les modifications sont perdues.

L'option à ajouter à la ligne de commande est :

-hdd fat:c:\temp par exemple, pour monter ce dossier comme nouveau disque dans QEmu. Dans ce cas, ce sera le disque E:. Le nom de ce lecteur sera QEMU VVFAT. Un répertoire peut également être monté en tant que disquette en utilisant -fda fat:floppy:c:\temp.

L'option -fda fat:floppy:rw:c:\temp permet de valider l'écriture dans le dossier de l'hôte, mais cette variante, utilisable uniquement avec le paramètre :floppy: n'est pas encore stabilisée : à utiliser avec précautions.

5.2.2.4 Partage par TFTP

QEmu permet d'accéder à un dossier de l'hôte par l'intermédiaire du protocole TFPT (Trivial File Transfer Protocol), version simplifiée de FTP. Cette possibilité suppose l'emploi de l'option -net user (option par défaut) sur la ligne de commande de QEmu.

Si le SE cible n'a pas de client TFTP, il faut en installer un. Windows 2000, par exemple, possède un client TFTP intégré.

Pour utiliser le transfert par TFTP, il faut indiquer à QEmu le répertoire dans lequel il pourra lire les fichiers. L'écriture n'est pas possible. Le transfert est limité au sens hôte ---> machine virtuelle, un seul fichier à la fois (les caractères génériques - *, ? - ne sont pas autorisés). On ajoutera donc à la ligne de commande l'option -tftp /Temp si on veut partager le répertoire \Temp de l'hôte. Ce répertoire devra être situé sur le même disque que le fichier qemu.exe.

Dans la machine virtuelle, il sera alors possible de transférer un fichier :

C:\>TFTP -i 10.0.2.2 get /temp/essai.txt \temp\essait.txt

où :

/temp/essai.txt est le fichier à copier depuis l'hôte;

\temp\essai.txt est la destination dans le client. Ce paramètre est facultatif. Il peut se résumer à un nom de fichier.

Bien entendu, le dossier déclaré pour le transfert TFTP ne peut être changé que lors d'un redémarrage de QEmu.

5.2.2.5 Partage par SMB

Ne semble pas fonctionner actuellement, sur un hôte Windows en tout cas...

Le partage SMB ressemble fortement au partage Microsoft (ce qui est normal puisque SMB est le protocole Microsoft pour le partage de fichiers en réseau), mis à part que le nom du dossier partagé est figé lors du démarrage de QEmu. La ligne de commande de QEmu doit être complétée par -smb /Temp si l'on veut partager le répertoire C:\Temp.

Il faut ensuite, dans l'hôte, ajouter au fichier lmhosts (C:\WINDOWS\LMHOSTS pour Windows 9x, C:\WINDOWS\SYSTEM32\DRIVERS\ETC\LMHOSTS pour Windows 2000-XP) la ligne :

10.0.2.4 smbserver

Le dossier partagé est ensuite accessible depuis le SE cible par la syntaxe \\smbserver\qemu. Ce nom peut être utilisé pour connecter un lecteur réseau.

Si le SE hôte n'est pas un SE Microsoft, il faudra y installer un serveur SMB (samba par exemple pour Linux)

5.2.3 Support USB

L'option -usb de la ligne de commande active le contrôleur USB de la machine virtuelle. Si cette option est omise, la machine virtuelle démarre sans contrôleur USB. Dans sa version actuelle pour Windows, QEmu ne peut pas utiliser les périphériques USB physiques. La version pour Linux, par contre, le permet.

Pour 'brancher' un périphérique USB lors du démarrage de QEmu, utilisez l'option -usbdevice sur la ligne de commande. Voyez l'option usb_add du moniteur pour plus d'informations (paragraphe 5.3.5, page 31).

5.2.4 Support Audio

Les options de cette section permettent d'installer une ou plusieurs cartes sonores dans la machine virtuelle. -audio-help permet d'en connaître toutes les variantes :

C:\QEMU>qemu -audio-help
Audio options:
  QEMU_AUDIO_DAC_FIXED_SETTINGS: boolean, default = 1
    Use fixed settings for host DAC
  QEMU_AUDIO_DAC_FIXED_FREQ: integer, default = 44100
    Frequency for fixed host DAC
  QEMU_AUDIO_DAC_FIXED_FMT: format, default = S16, (one of: U8 S8 U16 S16)
    Format for fixed host DAC
  QEMU_AUDIO_DAC_FIXED_CHANNELS: integer, default = 2
    Number of channels for fixed DAC (1 - mono, 2 – stereo)
  QEMU_AUDIO_DAC_VOICES: integer, default = 1
    Number of voices for DAC
  QEMU_AUDIO_ADC_FIXED_SETTINGS: boolean, default = 1
    Use fixed settings for host ADC
  QEMU_AUDIO_ADC_FIXED_FREQ: integer, default = 44100
    Frequency for fixed host ADC
  QEMU_AUDIO_ADC_FIXED_FMT: format, default = S16, (one of: U8 S8 U16 S16)
    Format for fixed host ADC
  QEMU_AUDIO_ADC_FIXED_CHANNELS: integer, default = 2
    Number of channels for fixed ADC (1 - mono, 2 – stereo)
  QEMU_AUDIO_ADC_VOICES: integer, default = 1
    Number of voices for ADC
  QEMU_AUDIO_TIMER_PERIOD: integer, default = 0
    Timer period in HZ (0 - use lowest possible)
  QEMU_AUDIO_PLIVE: boolean, default = 0
    (undocumented)
  QEMU_AUDIO_LOG_TO_MONITOR: boolean, default = 0
    print logging messages to montior instead of stderr

Available drivers:
Name: sdl
Description: SDL http://www.libsdl.org
One playback voice
Does not support capture
Options:
  QEMU_SDL_SAMPLES: integer, default = 1024
    Size of SDL buffer in samples

Name: none
Description: Timer based audio emulation
Theoretically supports many playback voices
Theoretically supports many capture voices
No options

Name: wav
Description: WAV renderer http://wikipedia.org/wiki/WAV
One playback voice
Does not support capture
Options:
  QEMU_WAV_FREQUENCY: integer, default = 44100
    Frequency
  QEMU_WAV_FORMAT: format, default = S16, (one of: U8 S8 U16 S16)
    Format
  QEMU_WAV_DAC_FIXED_CHANNELS: integer, default = 2
    Number of channels (1 - mono, 2 – stereo)
  QEMU_WAV_PATH: string, default = qemu.wav
    Path to wave file

Options are settable through environment variables.
Example:
  set QEMU_AUDIO_DRV=wav
  set QEMU_WAV_PATH=c:\tune.wav
  qemu ...

On peut voir que QEmu permet un paramétrage très pointu des périphériques audio. Sans entrer dans le détail de ces options, il est possible d'activer l'émulation sonore simplement en choisissant le ou les périphériques adéquats. En fonction des options de compilation, certaines émulations audio peuvent être disponibles ou non. Tapez la commande suivante pour en prendre connaissance.

C:\QEMU>qemu -soundhw ?
Valid sound card names (comma separated):
pcspk       PC speaker
sb16        Creative Sound Blaster 16
es1370      ENSONIQ AudioPCI ES1370

-soundhw all will enable all of the above

Dans le cas de l'exemple ci-dessus, trois périphériques sonores sont disponibles : le haut-parleur du PC, une SoundBlaster 16 et une Ensoniq ES1370. La carte compatible AdLib n'est disponible que si l'option -enable-adlib a été ajoutée sur la ligne de commande de ./configure (paragraphe 3.2.4, page 7), avant la compilation de QEmu.

Pour installer une SB16 et une ES1370, il faut fournir le paramètre suivant à la ligne de commande : -soundhw sb16,es1370. Pour installer automatiquement toutes les cartes sonores disponibles, utilisez l'option -soundhw all.

5.2.5 Support VNC

VNC (http://fr.wikipedia.org/wiki/VNC) est un protocole permettant de se connecter à un ordinateur distant, pour en prendre le contrôle comme si on était assis devant. QEmu intègre un serveur VNC qui peut être activé avec l'option -vnc n. Dans ce cas, QEmu démarre sans fenêtre visible (on ne voit rien directement à l'écran), mais on peut s'y connecter avec n'importe quel client VNC (UltraVNC : http://ultravnc.sourceforge.net/, RealVNC : http://www.realvnc.com/ par exemple, mais il en existe bien d'autres). n est le numéro d'écran sur lequel le client devra se connecter.

Lancez votre client VNC, puis connectez vous sur : 127.0.0.1:n ou localhost:n. Il sera probablement nécessaire d'autoriser l'option loopback connections du client, sinon VNC refusera de se connecter au poste sur lequel il s'exécute.

En combinant cette option avec l'option -redir, il est possible de se connecter sur une instance QEmu depuis un autre ordinateur du réseau (redirection du port 5900, communément utilisé par VNC). Voici comment cela est possible :

Sur un premier ordinateur, que nous appellerons PC01, lancer QEmu avec une ligne de commande semblable à celle-ci :

qemu.exe ..... -usb -usbdevice tablet -redir tcp:5890::5900 -vnc 1 -k fr

A partir du PC02, le client VNC (viewer) se connectera en utilisant la syntaxe : PC01:1:5890. Dans les options du client, il faudra prendre soin de choisir un encodage Hextile, et une profondeur de 256 couleurs. Suivant le client VNC utilisé (UltraVNC, RealVNC, TightVNC, etc...), il faudra parfois jouer sur d'autres options d'encodage pour obtenir une stabilité maximale de la connexion.

Remarque : l'utilisation de l'option -vnc nécessite l'option -k (paragraphe 5.2.6, page 29) pour imposer la langue du clavier.

5.2.6 Autres options

Voici encore quelques options qui n'entrent pas dans les catégories précédentes :

-boot [a|c|d] : permet de choisir le périphérique de démarrage de la machine virtuelle. c est la valeur par défaut lorsqu'aucune option boot n'est précisée.

-snapshot : cette option s'applique aux images disques. Lorsqu'elle est utilisée, les écritures ne sont pas faites dans l'image, mais dans un fichier temporaire. Lorsqu'on quitte QEmu, toutes les écritures faites sur les disques durs pendant la session sont ignorées. Cette option est équivalente à l'utilisation d'une image de base automatique et temporaire (voir qemu-img). Une commande du moniteur permet toutefois de valider ces écritures en les intégrant dans le fichier image.

-m nnn : permet d'allouer nnn Mo de RAM à la machine virtuelle. La valeur par défaut est de 128 Mo. Ajustez cette valeur en fonction des besoins du SE cible.

-smp n : permet de simuler une machine à plusieurs processeurs. n peut aller de 1 à 255, la valeur par défaut étant 1.

-win2k-hack : cette option peut se révéler nécessaire lorsqu'on installe Windows 2000 en tant que SE cible. L'installation de W2K se met parfois en boucle, remplissant complètement l'image disque. Ce paramètre permet d'éviter cette erreur, mais il ralentit l'émulateur. Ne l'utilisez pas en fonctionnement normal, mais seulement pendant l'installation de Windows 2000.

-S : cette option permet de figer la machine virtuelle dès le chargement de QEmu. Cela peut vous laisser le temps de changer l'affinité du processus avant de relancer l'exécution normale (commande cont ou c du moniteur).

-std-vga permet de remplacer la carte Cirrus Logic GD-5446 (carte par défaut) par une carte VGA VESA standard. Peut être utilise si le SE cible ne reconnaît pas correctement la carte par défaut.

-no-acpi désactive le support ACPI (http://fr.wikipedia.org/wiki/ACPI) si le SE cible ne réagit pas correctement à cette interface.

-loadvm <fichier> : jusqu'à la version 0.8.1, le moniteur, avec sa commande savevm permettait de sauvegarder l'état complet d'une machine virtuelle avant d'arrêter QEmu (un peu l'équivalent de la mise en hibernation de Windows, ou toute la RAM est sauvegardée dans un fichier). Cette option permet de recharger cet état au démarrage du programme. <fichier> fait référence au nom donné lors de la sauvegarde de l'état.

Depuis la version 0.8.2, le fonctionnement de cette commande a changé. Voyez le paragraphe 5.3.7, page 32 pour plus de précisions.

-k <langue> : permet de forcer la disposition du clavier. Cette option est nécessaire lorsqu'on utilise l'option -vnc (paragraphe 5.2.5, page 27), sinon QEmu émule un clavier américain. <langue> peut être :

ar  de-ch  es  fo     fr-ca  hu  ja  mk     no  pt-br  sv
da  en-gb  et  fr     fr-ch  is  lt  nl     pl  ru     th
de  en-us  fi  fr-be  hr     it  lv  nl-be  pt  sl     tr

Les fichiers de disposition du clavier se trouvent dans C:\MSYS\\home\<NomUtilisateur>\qemu\keymaps. Copiez ce dossier dans le le dossier C:\QEMU\BIOS afin que QEmu puisse trouver les définitions de clavier.